package com.kxs.stu_manager.views;

import com.kxs.stu_manager.global.User;
import com.kxs.stu_manager.model.UserModel;

import java.sql.SQLException;
import java.util.ArrayList;
import java.util.Scanner;

/**
 * @ClassName UserPage
 * @Description: TODO 用户操作的页面类
 * @Author: 2119475835@qq.com
 * @Date: 2023/1/9
 */
public class UserPage {
    private static UserModel um = new UserModel();

    /**
     * 用户操作界面 （登录或注册）
     *
     * @return 用户选择的操作数
     */
    public static int welcome() {
        System.out.println("* *********************************** *");
        System.out.println("* ************** 登录页面 ************ *");
        System.out.println("* ************* 1 - 登录 ************* *");
        System.out.println("* ************* 2 - 注册 ************* *");
        System.out.println("* ************* 0 - 退出系统  ******** *");
        System.out.println("* *********************************** *");
        int num;
        Scanner sc = new Scanner(System.in);
        do {
            System.out.print("请输入正确的选项：");
            num = sc.nextInt();
        } while (num < 0 || num > 2);
        return num;
    }

    /**
     * 退出页面
     */
    public static void bye() {
        System.out.println("* ********************** *");
        System.out.println("* ** bye!~ 欢迎下次使用 ** *");
        System.out.println("* ********************** *");
    }

    /**
     * 欢迎回来的页面
     *
     * @param userName 用户姓名
     */
    public static void welcomeToBack(String userName) {
        System.out.println("* ************************* *");
        System.out.println("* ** 欢迎 - " + userName + " - 回来 ** *");
        System.out.println("* ************************* *");
    }

    /**
     * 失败页面
     */
    public static void failed(String info) {
        System.out.println("操作失败：" + info);
    }

    /**
     * 成功页面
     *
     * @param info 成功信息
     */
    public static void success(String info) {
        System.out.println("操作成功：" + info);
    }

    /**
     * 获取要登陆的用户的用户名和密码对象
     *
     * @return 返回一个只有用户名和密码的User对象
     */
    public static User getLoginUser() {
        System.out.print("请输入用户名：");
        String username = new Scanner(System.in).nextLine();
        System.out.print("请输入密码：");
        String password = new Scanner(System.in).nextLine();

        return new User(username, password);
    }

    /**
     * 填写注册信息
     *
     * @return 返回一个User对象
     */
    public static User getRegUser() throws SQLException {
        String username;
        String password;
        // 模拟 Ajax 做页面无刷新的情况下的数据同步
        do {
            System.out.print("请输入可用的用户名：");
            username = new Scanner(System.in).nextLine();
        } while (um.getUserByName(username) != null);

        do {
            System.out.print("请输入密码：");
            password = new Scanner(System.in).nextLine();
            System.out.print("请确认密码：");
        } while (!password.equals(new Scanner(System.in).nextLine()));

        return new User(username, password);
    }

    public static int superManagerPage(String com) {
        String com1 = "";
        if (com.equals("2")) {
            com1 = "（不可操作，权限不足）";
        }

        System.out.println("* ******************************************* *");
        System.out.println("* **************** 选择管理页面 *************** *");
        System.out.println("* ********* 1 - 管理用户信息 " + com1);
        System.out.println("* ********* 2 - 管理学生信息");
        System.out.println("* ********* 0 - 退出系统");
        System.out.println("* ******************************************* *");
        int num;
        Scanner sc = new Scanner(System.in);
        do {
            System.out.print("请输入正确的选项：");
            num = sc.nextInt();
        } while (num < 0 || num > 2);
        return num;
    }

    public static int userMainPage(String com) {
        String com1 = "";
        if (com.equals("1")) {
            com1 = "（不可操作，权限不足）";
        }
        System.out.println("* ************************************************* *");
        System.out.println("* ***************** 用户信息管理页面 ***************** *");
        System.out.println("* ************* 1 - 查找用户信息");
        System.out.println("* ************* 2 - 修改用户信息 " + com1);
        System.out.println("* ************* 3 - 删除用户信息 " + com1);
        System.out.println("* ************* 0 - 结束查询并返回上一级");
        System.out.println("* ************************************************* *");
        int num;
        Scanner sc = new Scanner(System.in);
        do {
            System.out.print("请输入正确的选项：");
            num = sc.nextInt();
        } while (num < 0 || num > 3);
        return num;
    }

    /**
     * 结束学生信息管理界面
     *
     * @return 是否结束管理
     */
    public static String overPage() {
        System.out.print("是否确认结束管理并返回上一级（Y：确认 | N：取消）：");
        return new Scanner(System.in).nextLine();
    }

    /**
     * 查询用户的二级菜单
     *
     * @return 用户的操作数
     */
    public static int secSelUserPage() {
        System.out.println("* ****************************** *");
        System.out.println("* ********* 查询用户页面 ********* *");
        System.out.println("* ********* 1 - 查询全部 ********* *");
        System.out.println("* ********* 2 - ID查询  ********* *");
        System.out.println("* ********* 3 - 姓名查询 ********* *");
        System.out.println("* ********* 4 - 权限查询 ********* *");
        System.out.println("* ********* 0 - 结束查询 ********* *");
        System.out.println("* ******************************* *");
        int num;
        Scanner sc = new Scanner(System.in);
        do {
            System.out.print("请输入正确的选项：");
            num = sc.nextInt();
        } while (num < 0 || num > 4);
        return num;
    }

    /**
     * 获取要查询的学生ID
     *
     * @return 要查询的学生ID
     */
    public static int getUserId() {
        Scanner sc = new Scanner(System.in);
        int id;
        do {
            System.out.print("请输入学生ID：");
            id = sc.nextInt();
            if (id <= 0) { // 学号不能 <= 0
                System.out.println("学号非法！~");
            } else {
                break;
            }
        } while (true);
        return id;
    }

    /**
     * 展示数据
     *
     * @param userList 要展示的用户信息
     */
    public static boolean showUser(ArrayList<User> userList) {
        if (userList.isEmpty()) {
            failed("用户信息不存在!~");
            return true;
        }
        String[] competence = {"超级管理员", "普通管理员", "普通用户"};
        System.out.printf("┌──────┬────────────┬────────────┐\n");
        System.out.printf("│%-6s│%-12s│%-12s│\n", "ID", "USERNAME", "COMPETENCE");

        for (User user : userList) {
            System.out.printf("├──────┼────────────┼────────────┤\n");
            System.out.printf("│%-6d│%-12s│%-9s│\n", user.getId(),
                    user.getUserName(),
                    competence[Integer.parseInt(user.getCompetence())]);
        }
        System.out.printf("└──────┴────────────┴────────────┘\n");
        return false;
    }

    /**
     * 获取用户要查询的姓名
     *
     * @return 姓名
     */
    public static String getUserName() {
        System.out.print("请输入用户名：");
        String username = new Scanner(System.in).nextLine();
        return username;
    }

    /**
     * 获取用户要查询的权限
     *
     * @return 返回用户输入的权限
     */
    public static String getUserCompetence() {
        System.out.print("请输入用户权限（0 - 超级管理员 | 1 - 普通管理员 | 2 - 普通用户）：");
        return new Scanner(System.in).nextLine();
    }

    /**
     * 获取一个权限改后的对象
     *
     * @param user 修改前的对象
     * @return 修改后的对象
     */
    public static User editUserPage(User user) {
        String[] com = {"超级管理员", "普通管理员", "普通用户"};
        System.out.println("该用户当前权限为：" + com[Integer.parseInt(user.getCompetence())]);
        System.out.print("权限修改为：（0 - 超级管理员 | 1 - 普通管理员 | 2 - 普通用户）：");
        String com1 = new Scanner(System.in).nextLine();
        return new User(user.getId(), user.getUserName(), com1);
    }

    /**
     * 删除界面
     *
     * @return
     */
    public static boolean isDel() {
        System.out.print("确认是否删除（Y：确认 | N：取消）：");
        switch (new Scanner(System.in).nextLine()) {
            case "y":
            case "Y":
                return true;
            case "n":
            case "N":
                return false;
            default:
                System.out.println("输入有误！~");
                break;
        }
        return false;
    }

    /**
     * 删除的二级菜单
     * @return
     */
    public static int secDelUserPage() {
        System.out.println("* ****************************** *");
        System.out.println("* ********* 删除用户页面 ********* *");
        System.out.println("* ********* 1 - 删除全部 ********* *");
        System.out.println("* ********* 2 - 删除指定用户 ****** *");
        System.out.println("* ********* 0 - 退出删除 ********* *");
        System.out.println("* ******************************* *");
        int num;
        Scanner sc = new Scanner(System.in);
        do {
            System.out.print("请输入正确的选项：");
            num = sc.nextInt();
        } while (num < 0 || num > 2);
        return num;
    }

    /**
     * 确认是否删除全部用户信息
     * @return 确认 - true 取消 - false
     */
    public static boolean isDelAll() {
        System.out.print("确认是否删除全部用户信息（Y：确认 | N：取消）：");
        switch (new Scanner(System.in).nextLine()) {
            case "y":
            case "Y":
                return true;
            case "n":
            case "N":
                return false;
            default:
                System.out.println("输入有误！~");
                break;
        }
        return false;
    }
}
